Testing software, such as validating or verifying software, is a common activity among information technology (IT) organizations. For example, whether the software is a desktop application for execution at one or more client computer systems or a web application for execution at one or more server computer systems, it is often important to verify the quality of the software. While some types of errors in software, cause only annoyance or inconvenience to users, other types of errors have the potential to cause other problems, such as data and financial loss.
Software testing is a common method of verifying software quality. With software testing, the software (or one or more portions of software) under analysis is put through a suite of tests and the outputs are evaluated for correctness. However, software testing often provides only limited coverage and has a tendency to miss corner-case bugs. Another common method of software testing is performed by formal verification. Formal verification mathematically proves the satisfiability of a specific requirement on software under analysis or obtains a counterexample in the form of a test case that breaks the requirement and indicates a bug. Formal verification typically uses explicit state-based or symbolic model checkers as internal proof engines.
The subject matter claimed herein is not limited to embodiments that solve any disadvantages or that operate only in environments such as those described above. Rather, this background is only provided to illustrate one example technology area where some embodiments described herein may be practiced.